package com.hmall.common.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * MyBatis-Plus配置类
 * 功能：配置MyBatis-Plus拦截器，实现分页查询等增强功能
 */
@Configuration
@ConditionalOnClass({MybatisPlusInterceptor.class, BaseMapper.class}) // 仅当类路径中存在相关类时生效
public class MyBatisConfig {

    /**
     * 配置MyBatis-Plus拦截器
     * @return MybatisPlusInterceptor实例
     * 核心功能：
     * 1. 注册分页拦截器，实现物理分页功能
     * 2. 设置单页最大记录数限制（防止恶意查询）
     */
    @Bean
    @ConditionalOnMissingBean // 仅当容器中不存在该Bean时创建
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        // 1. 创建分页拦截器（指定数据库类型为MySQL）
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);

        // 2. 设置单页最大记录数（防止大量数据查询导致内存溢出）
        paginationInnerInterceptor.setMaxLimit(1000L);

        // 3. 将分页拦截器添加到MyBatis-Plus拦截器链
        interceptor.addInnerInterceptor(paginationInnerInterceptor);

        return interceptor;
    }
}